package com.yifeng.model;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

/**
 * 文件信息封装类
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class FileInfo {
    
    /**
     * 原始文件名
     */
    private String originalFileName;
    
    /**
     * 存储的文件名（唯一）
     */
    private String storedFileName;
    
    /**
     * 文件相对路径（用于数据库存储）
     */
    private String relativePath;
    
    /**
     * 文件绝对路径（用于文件操作）
     */
    private String absolutePath;
    
    /**
     * 文件大小（字节）
     */
    private Long fileSize;
    
    /**
     * 文件类型/扩展名
     */
    private String fileType;
    
    /**
     * 文件MD5校验值（可选）
     */
    private String md5;
    
    /**
     * 文件上传时间
     */
    private LocalDateTime uploadTime;
    
    /**
     * 文件MIME类型
     */
    private String mimeType;
    
    /**
     * 构造函数（常用字段）
     */
    public FileInfo(String originalFileName, String storedFileName, String relativePath, 
                   Long fileSize, String fileType) {
        this.originalFileName = originalFileName;
        this.storedFileName = storedFileName;
        this.relativePath = relativePath;
        this.fileSize = fileSize;
        this.fileType = fileType;
        this.uploadTime = LocalDateTime.now();
    }
    
    /**
     * 获取文件大小的人类可读格式
     */
    public String getFormattedFileSize() {
        if (fileSize == null || fileSize <= 0) return "0 B";
        
        final String[] units = new String[]{"B", "KB", "MB", "GB", "TB"};
        int digitGroups = (int) (Math.log10(fileSize) / Math.log10(1024));
        
        return String.format("%.1f %s", fileSize / Math.pow(1024, digitGroups), units[digitGroups]);
    }
    
    /**
     * 检查文件是否是图片类型
     */
    public boolean isImage() {
        if (fileType == null) return false;
        String[] imageTypes = {"jpg", "jpeg", "png", "gif", "bmp", "webp"};
        for (String type : imageTypes) {
            if (type.equalsIgnoreCase(fileType)) {
                return true;
            }
        }
        return false;
    }
    
    /**
     * 检查文件是否是文档类型
     */
    public boolean isDocument() {
        if (fileType == null) return false;
        String[] docTypes = {"pdf", "doc", "docx", "txt", "ppt", "pptx", "xls", "xlsx"};
        for (String type : docTypes) {
            if (type.equalsIgnoreCase(fileType)) {
                return true;
            }
        }
        return false;
    }
    /**
     * 检查文件是否是视频类型
     */
    public boolean isVideo() {
        if (fileType == null) return false;
        String[] videoTypes = {"mp4", "avi", "mov", "wmv", "flv", "mkv", "webm", "mpeg", "mpg"};
        for (String type : videoTypes) {
            if (type.equalsIgnoreCase(fileType)) {
                return true;
            }
        }
        return false;
    }
    /**
     * 获取文件完整名称（带扩展名）
     */
    public String getFullFileName() {
        if (storedFileName == null) return null;
        if (fileType == null || "unknown".equals(fileType)) {
            return storedFileName;
        }
        return storedFileName + "." + fileType;
    }
}